package cn.gz.lbs.main;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

import cn.gz.zoomtech.common.db.DbHandle;

import com.netnewera.l1.ans.Ans;
import com.netnewera.l1.ans.Lia;
import com.netnewera.l1.ans.Posinfo;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;


public class SelfTaskListener implements ServletContextListener {
	
	private static final Log log = LogFactory.getLog(SelfTaskListener.class);
	private Scheduler sched;

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		 log.info("when LBS-Server_shutDown,closeSomeThings.");
		 LIACacheManager liaCM = LIACacheManager.getInstance();
		 liaCM.shutDownCache();
		 this.shutdownJobs();
		 log.info("when LBS-Server_shutDown,closeSomeThingsOK.");
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
        log.info("when LBS-Server_v1.6[checkBW,phoneSec] startup,initSomeThings.");
        this.initChaces();
        this.startJobs();

        log.info("when LBS-Server_v1.6[checkBW,phoneSec] startup,initSomeThingsOK."); 
	}
	
	/**
	 * 
	* package_name: cn.gz.lbs.main
	* file_name:    SelfTaskListener.java
	* description:  初始化缓存管理器
	* 2013-6-27下午5:05:52
	* Author: chenhui
	 */
	private void initChaces() {
		try {

			LIACacheManager liaCM = LIACacheManager.getInstance();
			String lscClientIdOne = "spOne";
			String key1 = lscClientIdOne + "13760654681";
//			String key2 = lscClientIdOne + "13760654682";
			
            Ans ans1 = this.testInitAns("13760654681");
//            String respStr2 = this.testInitAns("13760654682");
            
			liaCM.putCache(key1, ans1);
//			liaCM.putCache(key2, respStr2);
			
		} catch (Exception ex) {
			ex.printStackTrace();
			log.error("ininErrorIs:", ex);
		}
	}
	
	public Ans testInitAns(String tel){
		String respStr = null;
		Ans ans = new Ans();
		try{
			XStream xStream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
			xStream.autodetectAnnotations(true);
//			构建ANS
			
			ans.setLcsclientid("spOne");
			ans.setOrid("0");
			
//			构建lia对象。
			Lia lia = new Lia();
			
			List<Posinfo> list = new ArrayList<Posinfo>();
//			位置信息start    
			Posinfo p = new Posinfo();
			p.setPositionresult("1");			
			p.setMsid(tel);
			p.setMsidtype("0");
			
			if("13760654681".equals(tel)){
				p.setAreacode("21");
				p.setLocaltime("20130628143021");
				p.setLatitudetype("1"); // 【注释：0:南纬；1:北纬】
				p.setLatitude("301628.111"); // 纬度
				p.setLongitudetype("1"); // 【注释：0:东经，1:西经】
				p.setLongitude("451533.431"); // 经度 【注释：经纬度数据单位采用十万分之一度】
			}else{
				p.setAreacode("22");
				p.setLocaltime("20130628143022");
				p.setLatitudetype("0"); // 【注释：0:南纬；1:北纬】
				p.setLatitude("301628.312"); // 纬度
				p.setLongitudetype("0"); // 【注释：0:东经，1:西经】
				p.setLongitude("451533.432"); // 经度 【注释：经纬度数据单位采用十万分之一度】
			}
			
			
			p.setRadius("200"); // 位置信息返回的扇区半径信息
			p.setPosour("6");   // 定义位置来源 
//			0	未使用
//			6	网络小区号
//			18	手机AGPS（包括AGPS+AFLT的混合模式）
//			20	手机AFLT
			p.setDirection("120"); // 用于定义被定位MS移动的方向（度）
//			位置信息end
			
			list.add(p);
			lia.setPosinfos(list);
			lia.setResult("0");
			
			ans.setLia(lia);
			respStr = xStream.toXML(ans);
			
		}catch(Exception ex){
			ex.printStackTrace();
			log.error("initInListenError:",ex);
		}
		return ans;
	}
	
	/**
	 * 
	* package_name: cn.gz.lbs.main
	* file_name:    SelfTaskListener.java
	* description: 启动定时任务
	* 2013-8-11下午3:27:57
	* Author: chenhui
	 */
	public void startJobs() {
		try {
			log.info("正在启动jobsXml配置的定时任务...");
			SchedulerFactory factory = new StdSchedulerFactory();
			sched = factory.getScheduler();
			sched.start();
			log.info("启动jobsXml配置的定时任务完成.");
		} catch (Exception ex) {
			log.error("启动jobsXml配置的定时任务时错误: " + ex.getMessage());
		}
	}
	/**
	 * 
	* package_name: cn.gz.lbs.main
	* file_name:    SelfTaskListener.java
	* description: 关闭定时任务
	* 2013-8-11下午3:29:33
	* Author: chenhui
	 */
	public void shutdownJobs() {
		try {
			log.info("准备关闭任务调务器...");
			sched.shutdown(true);
			log.info("成功关闭任务调务器.");
		} catch (SchedulerException ex) {
			ex.printStackTrace();
			log.error("closeJobsError:",ex);
		}
	}
	
	/**
	 * 
	* package_name: cn.gz.lbs.main
	* file_name:    SelfTaskListener.java
	* description: 动态任务测试
	* 2013-8-22下午11:22:53
	* Author: chenhui
	 */
	public void testDynamicJob(){
		try{
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	
	

}
